// 继承和简单使用与es6一般无二
(() => {
  // 多态:父类型的引用指向了子类型的对象，不同类型的对象针对相同的方法，产生了不同的行为
  // 定义一个父类
  class Animal{
    name:string
    constructor(name: string) {
      this.name = name
    }

    run(distance:number = 60) {
      console.log(distance+'米')
    }
  }
  // 定义一个子类
  class Dog extends Animal {
    constructor(name: string) {
      // 调用父类构造函数，实现子类中属性初始化
    super(name)
    }
    
    // 实例方法，重写父类方法
    run(distance:5) {
      console.log(distance+'米')
    }
}
  // 定义一个子类
  class pig extends Animal{
    constructor(name: string) {
      // 调用父类构造函数，实现子类中属性初始化
    super(name)
    }
    
    // 实例方法，重写父类方法
    run(distance:100) {
      console.log(distance+'米')
    }
  }

  // 实例化父类对象
  const ani: Animal = new Animal("动物")
  ani.run();
})()